package com.decent.common.entity.manager;

import com.decent.common.constant.DatePatternConstant;
import com.decent.common.enums.CommonStatusEnum;
import com.decent.common.enums.manager.MenuTypeEnum;
import com.decent.common.validator.operate.Add;
import com.decent.common.validator.operate.Delete;
import com.decent.common.validator.operate.Update;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 系统菜单
 *
 * @author wangyan
 **/
@Data
public class SystemMenu implements Serializable {
    private static final long serialVersionUID = 1036659171952356406L;
    /**
     * 主键
     */
    @NotNull(message = "请选择菜单", groups = {Delete.class})
    private Long id;

    /**
     * 父id
     */
    @NotNull(message = "请选择上级菜单", groups = {Add.class, Update.class})
    private Long pid;

    /**
     * 父ids
     */
    private String pids;

    /**
     * 名称
     */
    @NotBlank(message = "菜单名称不能为空", groups = {Add.class, Update.class})
    private String menuName;

    /**
     * 编码
     */
    @NotBlank(message = "菜单编号不能为空", groups = {Add.class, Update.class})
    private String menuCode;

    /**
     * 菜单类型
     */
    @NotNull(message = "菜单类型不能为空", groups = {Add.class, Update.class})
    private MenuTypeEnum menuType;

    /**
     * 图标
     */
    private String icon;

    /**
     * 路由地址
     */
    private String router;

    /**
     * 组件地址
     */
    private String component;

    /**
     * 权限标识
     */
    private String permission;

    /**
     * 是否可见
     */
    private Boolean visibility;

    /**
     * 查询列表路由
     */
    private String queryRoute;

    /**
     * 重定向地址
     */
    private String redirect;

    /**
     * 权重（字典 1系统权重 2业务权重）
     */
    private Byte weight;

    /**
     * 排序
     */
    @NotNull(message = "菜单排序不能为空", groups = {Add.class, Update.class})
    private Integer menuSort;

    /**
     * 备注
     */
    private String remark;

    /**
     * 状态
     */
    private CommonStatusEnum menuStatus;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = DatePatternConstant.NORM_DATETIME_PATTERN, timezone = DatePatternConstant.TIMEZONE)
    private LocalDateTime createTime;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 修改时间
     */
    @JsonFormat(pattern = DatePatternConstant.NORM_DATETIME_PATTERN, timezone = DatePatternConstant.TIMEZONE)
    private LocalDateTime updateTime;

    /**
     * 修改人
     */
    private String lastModifier;
}
